home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / xcdplayer / cdrom_sgi.h < prev    next >
C/C++ Source or Header  |  1994-08-01  |  4KB  |  136 lines

  1. /*
  2.  * Copyright (C) 1990 Regents of the University of California.
  3.  *
  4.  * Permission to use, copy, modify, distribute, and sell this software and
  5.  * its documentation for any purpose is hereby granted without fee,
  6.  * provided that the above copyright notice appear in all copies and that
  7.  * both that copyright notice and this permission notice appear in
  8.  * supporting documentation, and that the name of the University of
  9.  * California not be used in advertising or publicity pertaining to
  10.  * distribution of the software without specific, written prior
  11.  * permission.  the University of California makes no representations
  12.  * about the suitability of this software for any purpose.  It is provided
  13.  * "as is" without express or implied warranty.
  14.  */
  15.  
  16. # include <X11/Intrinsic.h>
  17. # include <cdaudio.h>
  18. # include <audio.h>
  19.  
  20. # define NOTITLESTR    "No Title"
  21. # define NODISCSTR    "No Disc"
  22.  
  23. # define VAL2PCT(a)    (double)(1.0 - 1.0 * (exp((-7.0/255.0) * a)))
  24. # define PCT2VAL(a)    (int)((-255.0/7.0) * log(1.0 * (1.0 - a)))
  25.  
  26. # define bit(n)            (1 << (n))
  27.  
  28. /* bits for cdrom_state */
  29. # define CDROM_STATE_PLAY    bit(0)
  30. # define CDROM_STATE_PAUSE    bit(1)
  31. # define CDROM_STATE_STOP    bit(2)
  32. # define CDROM_STATE_EJECTED    bit(3)
  33. # define CDROM_STATE_CYCLE    bit(4)
  34. # define CDROM_STATE_SHUFFLE    bit(5)
  35. # define CDROM_STATE_PROGRAM    bit(6)
  36.  
  37. /* return codes from cdrom_status() */
  38. # define CDROM_INVALID        CD_STILL
  39. # define CDROM_PLAYING        CD_PLAYING
  40. # define CDROM_PAUSED        CD_PAUSED
  41. # define CDROM_COMPLETED    CD_READY
  42. # define CDROM_ERROR        CD_ERROR
  43. # define CDROM_NO_STATUS    CD_NODISC
  44. # define CD_ABORT        0xfe
  45.  
  46. #define CDROM_LEADOUT   0xAA
  47. #define CDROM_MSF    0x02
  48. #define    STILL_MOUNTED    1
  49. #define    UNMOUNTED    0
  50. #define SAMPLES_PER_FRAME (CDDA_DATASIZE/2)
  51.  
  52. struct cdrom_tocentry {
  53.     unsigned char cdte_track;
  54.     unsigned char cdte_adr  :4;
  55.     unsigned char cdte_ctrl :4;
  56.     unsigned char cdte_format;
  57.     union {
  58.         struct {
  59.             int minute;
  60.             int second;
  61.             int frame;
  62.         } msf;
  63.         int lba;
  64.     } cdte_addr;
  65.     unsigned char cdte_datamode;
  66. };
  67.  
  68. struct msf {
  69.     int   minute;
  70.     int   second;
  71.     int   frame;
  72. };
  73.  
  74. struct prognode {
  75.     unsigned char    track;
  76.     Widget        button;
  77.     struct prognode *next;
  78.     struct prognode *prev;
  79. };
  80.  
  81. typedef struct _cdrom_info {
  82.     unsigned char    curtrack;    /* current track playing    */
  83.     unsigned char    mintrack;    /* first audio track        */
  84.     unsigned char    maxtrack;    /* last audio track        */
  85.     unsigned char    ntracks;    /* size of random track list    */
  86.     int        duration;    /* seconds played so far    */
  87.     int        state;        /* state of cd-rom drive    */
  88.     short        currand;    /* index into random track list */
  89.     short        lastprog;    /* number of selections in prog.*/
  90.     unsigned short    *times;        /* duration of each track    */
  91.     struct msf     *addrs;        /* starting minute/second/frames*/
  92.     struct prognode    *selection;    /* currently selected prog. trk    */
  93.     struct prognode *program;    /* list of programmed tracks    */
  94.     int        scsi_audio;    /* true if scsi audio is avail. */
  95. } cdrom_info;
  96.  
  97. /* The below is a repeat of the above for SGIs using scsi_audio (the    */
  98. /* CD* calls don't return the info anymore).                 */
  99. typedef struct _cdrom_audio_info {
  100.     unsigned char    curtrack;
  101.     int        duration;
  102.     int        state;
  103.     int        start_track;    /* Start track for play        */
  104.     int        end_track;    /* End track for play        */
  105.     int        child_pid;    /* PID of child process        */
  106. } cdrom_audio_info;
  107.  
  108. struct _cdrom_shmem {
  109.     cdrom_audio_info    cdrom_audio_cdi;
  110.     struct msf        cdrom_audio_msf;
  111. };
  112.  
  113. extern int        cdrom_open();
  114. extern void        cdrom_close();
  115. extern int        cdrom_start();
  116. extern int        cdrom_stop();
  117. extern int        cdrom_eject();
  118. extern int        cdrom_pause();
  119. extern int        cdrom_resume();
  120. extern int        cdrom_volume();
  121. extern int        cdrom_get_times();
  122. extern int        cdrom_get_curtrack();
  123. extern int        cdrom_get_msf();
  124. extern int        cdrom_get_curmsf();
  125. extern int        cdrom_play_track();
  126. extern int        cdrom_play_msf();
  127. extern int        cdrom_read_tocentry();
  128. extern int        cdrom_read_tochdr();
  129. extern int        cdrom_status();
  130.  
  131. extern cdrom_info    cdi;
  132. extern char        *disc_title;
  133. extern char        program_str[];
  134. extern char        *cdInfoDir;
  135.  
  136.